using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Xml.Linq;
using Connection;
namespace Entidades
{
	public abstract class DALPregunta
	{
		private const string __ErrorAlta = "No se pudo dar el alta (Pregunta), ";
		private const string __ErrorBaja = "No se pudo dar la baja (Pregunta), ";
		private const string __ErrorModificacion = "No se pudo hacer la modificacion (Pregunta), ";
		private const string __ErrorTraerUno = "No se pudo Traer Uno (Pregunta), ";
		private const string __ErrorTraerTodos = "No se pudo Traer Todos (Pregunta), ";
		public static void Alta(Pregunta Pregunta)
		{
			try {
				parametrosArray pa = new parametrosArray();
				pa.add("IdPostulacion", Pregunta.IdPostulacion);
				pa.add("IdUsuario", Pregunta.IdUsuario);
				pa.add("Pregunta", Pregunta.strPregunta);
				using (DataSet ds = Connection.Connection.Traer("p_Pregunta_Alta", pa)) {
					if (ds.Tables.Count > 0) {
						Pregunta.Id = int.Parse(ds.Tables[0].Rows[0][0].ToString());
					} else {
						throw new Exception(__ErrorAlta);
					}
				}
			} catch (Exception ex) {
				throw new Exception(__ErrorAlta + ex.Message);
			}
		}
		public static void Baja(int Id)
		{
			try {
				parametrosArray pa = new parametrosArray();
				pa.add("Id", Id);
				Connection.Connection.Ejecutar("p_Pregunta_Baja", pa);
			} catch (Exception ex) {
				throw new Exception(__ErrorBaja + ex.Message);
			}
		}
		public static void Modificar(Pregunta Pregunta)
		{
			try {
				parametrosArray pa = new parametrosArray();
				pa.add("Id", Pregunta.Id);
				pa.add("IdPostulacion", Pregunta.IdPostulacion);
				pa.add("IdUsuario", Pregunta.IdUsuario);
				pa.add("Pregunta", Pregunta.strPregunta);
				Connection.Connection.Ejecutar("p_Pregunta_Modificacion", pa);
			} catch (Exception ex) {
				throw new Exception(__ErrorModificacion + ex.Message);
			}
		}
        public static void MarcarComoLeido(Pregunta Pregunta)
        {
            try
            {
                parametrosArray pa = new parametrosArray();
                pa.add("Id", Pregunta.Id);
                Connection.Connection.Ejecutar("p_Pregunta_MarcarComoLeido", pa);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorModificacion + ex.Message);
            }
        }
		public static Pregunta traerUno(int Id)
		{
			parametrosArray pa = new parametrosArray();
			pa.add("Id", Id);
			using (DataSet ds = Connection.Connection.Traer("p_Pregunta_TraerUno", pa)) {
				if (ds.Tables.Count > 0) {
					if (ds.Tables[0].Rows.Count > 0) {
						return llenarEntidad(ds.Tables[0].Rows[0]);
					}
				}
			}
			throw new Exception(__ErrorTraerUno);
		}
		public static List<Pregunta> TraerTodos()
		{
			using (DataSet ds = Connection.Connection.Traer("p_Pregunta_TraerTodos")) {
				if (ds.Tables.Count > 0) {
					List<Pregunta> li = new List<Pregunta>();
					if (ds.Tables[0].Rows.Count > 0) {
						foreach (DataRow dr in ds.Tables[0].Rows) {
							li.Add(llenarEntidad(dr));
						}
					}
					return li;
				}
			}
			throw new Exception(__ErrorTraerTodos);
		}
		public static List<Pregunta> getAllByIdPostulacion(int IdPostulacion)
		{
			parametrosArray pa = new parametrosArray();
			pa.add("IdPostulacion", IdPostulacion);
			using (DataSet ds = Connection.Connection.Traer("p_Pregunta_getAllByIdPostulacion", pa)) {
				if (ds.Tables.Count > 0) {
					List<Pregunta> li = new List<Pregunta>();
					if (ds.Tables[0].Rows.Count > 0) {
						foreach (DataRow dr in ds.Tables[0].Rows) {
							li.Add(llenarEntidad(dr));
						}
					}
					return li;
				}
			}
			throw new Exception("ErrorgetAllByIdPostulacion");
		}
		public static List<Pregunta> getAllByIdUsuario(int IdUsuario)
		{
			parametrosArray pa = new parametrosArray();
			pa.add("IdUsuario", IdUsuario);
			using (DataSet ds = Connection.Connection.Traer("p_Pregunta_getAllByIdUsuario", pa)) {
				if (ds.Tables.Count > 0) {
					List<Pregunta> li = new List<Pregunta>();
					if (ds.Tables[0].Rows.Count > 0) {
						foreach (DataRow dr in ds.Tables[0].Rows) {
							li.Add(llenarEntidad(dr));
						}
					}
					return li;
				}
			}
			throw new Exception("ErrorgetAllByIdUsuario");
		}

		public static List<Pregunta> TraerTodasParaElUsuario(int idUsuario)
		{
			parametrosArray pa = new parametrosArray();
			pa.add("IdUsuario", idUsuario);
			using (DataSet ds = Connection.Connection.Traer("p_Pregunta_TraerTodasParaElUsuario", pa)) {
				if (ds.Tables.Count > 0) {
					List<Pregunta> li = new List<Pregunta>();
					if (ds.Tables[0].Rows.Count > 0) {
						foreach (DataRow dr in ds.Tables[0].Rows) {
							li.Add(llenarEntidad(dr));
						}
					}
					return li;
				}
			}
			throw new Exception("ErrorgetAllByIdUsuario");
		}

		private static Pregunta llenarEntidad(DataRow dr)
		{
			Pregunta Pregunta = new Pregunta();
			if (dr.Table.Columns.Contains("Id")) {
				if (!object.ReferenceEquals(dr["Id"], DBNull.Value)) {
					Pregunta.Id = int.Parse(dr["Id"].ToString());
				}
			}
			if (dr.Table.Columns.Contains("IdPostulacion")) {
				if (!object.ReferenceEquals(dr["IdPostulacion"], DBNull.Value)) {
					Pregunta.IdPostulacion = int.Parse(dr["IdPostulacion"].ToString());
				}
			}
			if (dr.Table.Columns.Contains("IdUsuario")) {
				if (!object.ReferenceEquals(dr["IdUsuario"], DBNull.Value)) {
					Pregunta.IdUsuario = int.Parse(dr["IdUsuario"].ToString());
				}
			}
			if (dr.Table.Columns.Contains("Pregunta")) {
				if (!object.ReferenceEquals(dr["Pregunta"], DBNull.Value)) {
					Pregunta.strPregunta = dr["Pregunta"].ToString();
				}
			}
			if (dr.Table.Columns.Contains("FechaAlta")) {
				if (!object.ReferenceEquals(dr["FechaAlta"], DBNull.Value)) {
					Pregunta.FechaAlta = DateTime.Parse(dr["FechaAlta"].ToString());
				}
			}
			if (dr.Table.Columns.Contains("FechaBaja")) {
				if (!object.ReferenceEquals(dr["FechaBaja"], DBNull.Value)) {
					Pregunta.FechaBaja = DateTime.Parse(dr["FechaBaja"].ToString());
				}
			}
			if (dr.Table.Columns.Contains("IdMotivoBajaPregunta")) {
				if (!object.ReferenceEquals(dr["IdMotivoBajaPregunta"], DBNull.Value)) {
					Pregunta.IdMotivoBajaPregunta = int.Parse(dr["IdMotivoBajaPregunta"].ToString());
				}
			}
			if (dr.Table.Columns.Contains("IdUsuarioBajaPregunta")) {
				if (!object.ReferenceEquals(dr["IdUsuarioBajaPregunta"], DBNull.Value)) {
					Pregunta.IdUsuarioBajaPregunta = int.Parse(dr["IdUsuarioBajaPregunta"].ToString());
				}
			}
            if (dr.Table.Columns.Contains("FechaLeido"))
            {
                if (!object.ReferenceEquals(dr["FechaLeido"], DBNull.Value))
                {
                    Pregunta.FechaLeido = DateTime.Parse(dr["FechaLeido"].ToString());
                }
            }

			if (dr.Table.Columns.Contains("IdRespuesta")) {
				if (!object.ReferenceEquals(dr["IdRespuesta"], DBNull.Value)) {
					Pregunta.Respuesta.Id = int.Parse(dr["IdRespuesta"].ToString());

					if (dr.Table.Columns.Contains("Id")) {
						if (!object.ReferenceEquals(dr["Id"], DBNull.Value)) {
							Pregunta.Respuesta.IdPregunta = int.Parse(dr["Id"].ToString());
						}
					}
					if (dr.Table.Columns.Contains("Respuesta")) {
						if (!object.ReferenceEquals(dr["Respuesta"], DBNull.Value)) {
							Pregunta.Respuesta.strRespuesta = dr["Respuesta"].ToString();
						}
					}
					if (dr.Table.Columns.Contains("FechaAltaRespuesta")) {
						if (!object.ReferenceEquals(dr["FechaAltaRespuesta"], DBNull.Value)) {
							Pregunta.Respuesta.FechaAlta = DateTime.Parse(dr["FechaAltaRespuesta"].ToString());
						}
					}
					if (dr.Table.Columns.Contains("FechaBajaRespuesta")) {
						if (!object.ReferenceEquals(dr["FechaBajaRespuesta"], DBNull.Value)) {
							Pregunta.Respuesta.FechaBaja = DateTime.Parse(dr["FechaBajaRespuesta"].ToString());
						}
					}
					if (dr.Table.Columns.Contains("IdRespuesta")) {
						if (!object.ReferenceEquals(dr["IdRespuesta"], DBNull.Value)) {
							Pregunta.Respuesta.Id = int.Parse(dr["IdRespuesta"].ToString());
						}
					}
                   
				}
			}
			return Pregunta;
		}



	}
}
